package com.nineclock.system.service.impl;

import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.nineclock.common.constant.NcConstant;
import com.nineclock.common.entity.UserInfo;
import com.nineclock.common.enums.ResponseEnum;
import com.nineclock.common.exception.NcException;
import com.nineclock.common.threadlocal.CurrentUserHolder;
import com.nineclock.common.utils.BeanHelper;
import com.nineclock.system.dto.SysCompanyContactConfigDTO;
import com.nineclock.system.mapper.SysCompanyContactConfigMapper;
import com.nineclock.system.pojo.SysCompanyContactConfig;
import com.nineclock.system.service.SysCompanyContactConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
@Slf4j
public class SysCompanyContactConfigServiceImpl implements SysCompanyContactConfigService {
    @Autowired
    private SysCompanyContactConfigMapper sysCompanyContactConfigMapper;

    @Override
    public void addCompanyContactConfig(SysCompanyContactConfigDTO sysCompanyContactConfigDTO) {

        if(sysCompanyContactConfigDTO == null || sysCompanyContactConfigDTO.getName() ==null){
            throw new RuntimeException("添加企业通讯录字段无效 !!!");
         }

        // 假定企业id 为1
        Long companyId = 1L;

        //复制 到 pojo
        SysCompanyContactConfig companyContactConfig = BeanHelper.copyProperties(sysCompanyContactConfigDTO, SysCompanyContactConfig.class);
        //设置字段类型
        companyContactConfig.setFieldType("String");
        //设置状态值
        companyContactConfig.setStatus((short)1);
        companyContactConfig.setCompanyId(companyId);

        sysCompanyContactConfigMapper.insert(companyContactConfig);
    }


    @Override
    public List<SysCompanyContactConfigDTO> getCompanyContactConfig() {
        List<SysCompanyContactConfigDTO> list = new ArrayList<>();

        //从线程中获取认证信息
        UserInfo userInfo = CurrentUserHolder.get();

        //System.err.println("==========================="+userInfo);
        //从认证信息中获取 企业id
        Long companyId = userInfo.getCompanyId();

        LambdaQueryWrapper<SysCompanyContactConfig> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(SysCompanyContactConfig::getCompanyId, companyId);
        List<SysCompanyContactConfig> companyContactConfigs = sysCompanyContactConfigMapper.selectList(wrapper);

        if(CollectionUtil.isEmpty(companyContactConfigs)){
            for (String fieldName : NcConstant.COMPANY_CONFIG_CONTACT_LIST) {
                SysCompanyContactConfig config = new SysCompanyContactConfig();
                // 添加字段
                config.setStatus((short)1);
                config.setFieldType("String");
                config.setType("fixed");
                config.setCompanyId(companyId);
                config.setName(fieldName);
                sysCompanyContactConfigMapper.insert(config);

                // dto --> jopo  并添加到集合
                list.add(BeanHelper.copyProperties(config,SysCompanyContactConfigDTO.class));
            }
            return list;
        }
        return BeanHelper.copyWithCollection(companyContactConfigs,SysCompanyContactConfigDTO.class);
    }


    @Override
    public void updateCompanyContactConfig(Long id, Short status) {
        SysCompanyContactConfig sysCompanyContactConfig = sysCompanyContactConfigMapper.selectById(id);

        //从线程中获取认证信息
        UserInfo userInfo = CurrentUserHolder.get();

        //从认证信息中获取 企业id
        Long companyId = userInfo.getCompanyId();

        if( id == null || status == null ||sysCompanyContactConfig == null){
            throw new NcException(ResponseEnum.DATA_NOT_EXISTS);
        }
        sysCompanyContactConfig.setCompanyId(companyId);
        sysCompanyContactConfig.setStatus(status);
        sysCompanyContactConfigMapper.updateById(sysCompanyContactConfig);

    }


    @Override
    public void deleteCompanyContactConfig(Long id) {
        SysCompanyContactConfig sysCompanyContactConfig = sysCompanyContactConfigMapper.selectById(id);

        if (id == null || sysCompanyContactConfig ==null) {
            throw new NcException(ResponseEnum.DATA_NOT_EXISTS);
        }

        sysCompanyContactConfigMapper.deleteById(id);
    }


}
